#include #define INF 1e7 using namespace std; int dp[1<<20][22]; int G[22][22]; int points[22]; int ttime[22]; int ddl[22]; int n, T; int f(int bm, int curr) { // explore all cities represented by bm, end up at curr if (bm&(1< ddl[curr]) ? INF : t+ttime[curr]; } else if (!bm) { return G[n][curr]; // just go straight to it } else if (dp[bm][curr] != 2*INF) { return dp[bm][curr]; // memoize! } else { int r = INF; for (int i = 0; i < n; i++) { // try all cities you're not doing task on if (bm&(1<> n >> T; for (int i = 0; i < (1<> points[i] >> ttime[i] >> ddl[i]; if (ddl[i] == -1) ddl[i] = INF; } for (int i = 0; i < n+2; i++) for (int j = 0; j < n+2; j++) cin >> G[i][j]; vector c(n, 21); int best = 0; for (int i = 0; i < (1< cc; for (int j = 0; j < n; j++) { if (i&(1< cc[i]) { update = 1; break; } } if (update == 2) update = (c.size() > cc.size()) ? 1 : 0; if (update) c = cc; } } } cout << best << '\n'; if (best) for (int i : c) cout << i << ' '; return 0; }